#include<iostream>
#include<pthread.h>
#include<unistd.h>
using namespace std;

void *threadRun1(void* args)
{
    while(true)
    {
        sleep(1);
        cout<<"t1 thread:"<<getpid()<<endl;
    }
}

void *threadRun2(void* args)
{
    char* str="AAA";
    while(true)
    {
        sleep(5);
        cout<<"t2 thread:"<<getpid()<<endl;
        *str='A';//这里一定产生报错
        //字符串常量区是不允许被修改的，只允许被读取
        //原因：str里面保存的是指向字符的虚拟地址的起始地址，采用*str取地址时一定有从虚拟地址到物理地址的转换
        //也就是MMU+查页表的方式，此时会对用户操作进行权限审查，虽然能找到str的地址，但是用户操作是非法的
        //因此MMU发生异常，OS识别异常并转化为信号发送给目标进程，进程从内核态转到用户态时终止
    }
}


int main()
{
    pthread_t t1,t2,t3;
    pthread_create(&t1,nullptr,threadRun1,nullptr);
    pthread_create(&t2,nullptr,threadRun2,nullptr);

    while(true)
    {
        sleep(1);
        cout<<"main thread:"<<getpid()<<endl;
    }



    return 0;
}